package HZTest;

import java.util.HashSet;
import java.util.Set;

/**
 * @author Hang
 * @date 2022/9/22
 * @project AutumnOffer
 * @description
 **/
public class lc3 {
    public static void main(String[] args) {
        String s = "abcabcbb";
        System.out.println(lengthOfLongestSubstring(s));
    }
    public static int lengthOfLongestSubstring(String s) {
        Set<Character> res = new HashSet<>(); // 用于存放不重复的字符串
        int n = s.length(); // 遍历字符串的长度
        int pos = -1,ans = 0; //起始位置和记录最大非重复的长度
        for(int i=0;i<n;i++){
            if(i!=0){ // 如果前面的长度不从0开始，意味着已经重复了，所以需要移除第一个，如果不是第一个重复，后面还会继续退出，继续往后前进
                res.remove(s.charAt(i-1));
            }
            while (pos + 1 < n&&!res.contains(s.charAt(pos+1))){ //定位长度，并且判断是否重复
                res.add(s.charAt(pos+1));
                pos++;
            }
            ans = Math.max(ans,pos-i+1); //取非重复的最大值
        }
        return ans;
    }
}
